// 引入api
import { mergeCart, getCart } from "@/utils/Api/CartApi";
export default {
  namespaced: true,
  state: {
    // 购物车数据
    list: [],
  },
  getters: {},
  mutations: {
    // 添加数据到购物车列表
    addList(state, obj) {
      state.list.push(obj);
    },
    // 有重复商品数量加
    addNumber(state, obj) {
      state.list[obj.index].count += obj.count;
    },
    // 数量减
    cutNum(state, index) {
      state.list[index].count--;
      if (state.list[index].count <= 1) {
        state.list[index].count = 1;
      }
    },
    // 数量加
    addNum(state, index) {
      state.list[index].count++;
    },
    // 全选
    chooseAll(state, flagAll) {
      state.list.forEach((item) => {
        item.selected = flagAll;
      });
    },
    // 删除
    del(state, index) {
      state.list.splice(index, 1);
    },
    // 选中删除
    chooseDel(state) {
      state.list = state.list.filter((item) => {
        return item.selected == false;
      });
    },
    // 单个改变状态
    changeState(state, index) {
      state.list[index].selected = !state.list[index].selected;
    },
    // 清空本地的购物车
    clearList(state) {
      state.list = [];
    },
    // 调用方法  赋值购物车数据
    cartList(state, arr) {
      state.list = arr;
    },
  },
  getters: {
    // 购物车数量
    cartNum(state) {
      let sum = 0;
      state.list.forEach((item) => {
        sum += item.count;
      });
      return sum;
    },
    // 选中的上商品数量
    chooseNum(state) {
      let sum = 0;
      state.list.forEach((item) => {
        if (item.selected) {
          sum += item.count;
        }
      });
      return sum;
    },
    // 选中总价格
    allPrice(state) {
      let sum = 0;
      state.list.forEach((item) => {
        if (item.selected) {
          sum += item.count * item.price;
        }
      });
      return sum;
    },
    // 处理合并购物车需要的数据
    mergeObj(state) {
      return state.list.map((item) => {
        return {
          skuId: item.skuId,
          count: item.count,
          selected: item.selected,
        };
      });
    },
  },
  actions: {
    // 合并数据
    async asyncMergeCart(context) {
      await mergeCart(context.getters.mergeObj);
      // 合并数据后清空本地数据
      context.commit("clearList");
    },
    // 登录的时候请求服务器的购物车数据
    async asyncGetCart(context) {
      let res = await getCart();
      // 调用接口 赋值购物车数据
      context.commit("cartList", res.data.result);
    },
  },
};
